package com.kaifamiao.comparing;

import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;

public class ComparePanda {

    public static void main(String[] args) {
        final Scanner sc = new Scanner(System.in);

        Panda[] pandas = new Panda[5];
        pandas[0] = new Panda( 1001, "和和", 5, 30 );
        pandas[1] = new Panda( 958, "美美", 6, 35 );
        pandas[2] = new Panda( 200, "团团", 8, 40 );
        pandas[3] = new Panda( 1002, "圆圆", 7, 28 );
        pandas[4] = new Panda( 1, "安安", 4, 20 );
        System.out.println( Arrays.toString( pandas ) );

        // 用匿名类实现 java.util.Comparator 接口
        Comparator<Panda> comparator1 = new Comparator<Panda>() {
            // 根据第一个参数小于、等于或大于第二个参数分别返回负整数、零或正整数
            @Override
            public int compare(Panda p1, Panda p2) {
                if( p1 != null && p2 != null ) {
                    return p1.getId() - p2.getId();
                    // 这里的 compareTo 是 Integer 类中的方法
                    // return p1.getId().compareTo( p2.getId() );
                }
                return 0;
            }
        };

        Comparator<Panda> comparator2 = new Comparator<Panda>() {
            @Override
            public int compare(Panda p1, Panda p2) {
                if( p1 != null && p2 != null ) {
                    // 这里的 compareTo 是 String 类中的方法
                     return p1.getName().compareTo( p2.getName() );
                }
                return 0;
            }
        };

        Comparator<Panda> comparator3 = new Comparator<Panda>() {
            @Override
            public int compare(Panda p1, Panda p2) {
                if( p1 != null && p2 != null ) {
                    return p1.getAge() - p2.getAge();
                }
                return 0;
            }
        };

        System.out.println( "请选择排序方式" );
        System.out.println( "1 表示按照id升序排列" );
        System.out.println( "2 表示按照name升序排列" );
        System.out.println( "3 表示按照age升序排列" );
        System.out.println( "4 表示按照weight升序排列" );
        int type = sc.nextInt();
        switch( type ) {
            case 1:
                // 调用 Arrays 的 sort 方法 使用 比较器 对 pandas 数组进行 整体排序
                Arrays.sort( pandas, comparator1 );
                break;
            case 2:
                Arrays.sort( pandas, comparator2 );
                break;
            case 3:
                Arrays.sort( pandas, comparator3 );
                break;
            default:
                // 按照自然顺序进行整体排序(若Panda支持自然排序的话)
                Arrays.sort( pandas );
        }

        System.out.println( Arrays.toString( pandas ) );

        sc.close();
    }

}
